In a distributed storage system, data as a whole or different portions of the data is spread over and stored in several physically separate computer storage servers (also known as storage nodes) of a distributed storage system. The total storage capacity of the distributed storage system is designed to be much greater than that of a single storage node. Presently, some NoSQL (or non-SQL) databases have emerged as examples of large-scale distributed databases, where every single item or entry in the database system is stored as an attribute name (or key), together with its respective value. The simplest type is known as a key→value store, where the fixed data “key” can be used to store and then retrieve a value. The value can be a fixed bit-length reference pointing to data or data in bytes.
Highly distributed databases ideally need to present a uniform and consistent state of their stored data to all clients and at all times. Modifications to data need to be handled carefully to ensure all clients get a consistent picture of the data. When a system is comprised of many physically separate servers with unreliable network connections, it becomes increasingly difficult to handle system-wide (e.g., global) atomic updates to data because nodes may fail randomly at any time (e.g., temporarily or permanently).
In view of the above, there is a need for efficient methods and systems to form a highly distributed database management system that provide atomicity, consistency, isolation and durability (ACID) properties on top of key-value data models, without limiting the speed of the system. There is also a need for such systems to maintain the illusion or appearance of a globally consistent, fault-tolerant, federated distributed database system.